﻿#include<iostream>
using namespace std;
//#include<algorithm>
#include<list>
//#include<vector>
//#include<stack>

//力扣-最小栈
// 较高效题解
//struct value
//{
//    int val;
//    size_t count;
//
//    value(int num = int())
//        :val(num)
//        , count(1)
//    {}
//};
//
//class MinStack {
//public:
//    MinStack() {}
//
//    void push(int val) {
//        _st.push(val);
//        if (_minst.empty())
//        {
//            _minst.push(struct value(val));
//        }
//        else if (val <= _minst.top().val)
//        {
//            if (val == _minst.top().val)
//            {
//                ++_minst.top().count;
//            }
//            else
//            {
//                _minst.push(struct value(val));
//            }
//        }
//    }
//
//    void pop() {
//        if (_st.top() == _minst.top().val)
//        {
//            --_minst.top().count;
//            if (_minst.top().count == 0)
//                _minst.pop();
//        }
//        _st.pop();
//    }
//
//    int top() {
//        return _st.top();
//    }
//
//    int getMin() {
//        return _minst.top().val;
//    }
//private:
//    stack<int> _st;
//    stack<struct value> _minst;
//};

//暴力题解
//class MinStack {
//public:
//    MinStack() {}
//
//    void push(int val) {
//        _st.push(val);
//        if (_minst.empty() || val<=_minst.top())
//        {
//            _minst.push(val);
//        }
//    }
//
//    void pop() {
//        if (_st.top() == _minst.top())
//        {
//            _minst.pop();
//        }
//        _st.pop();
//    }
//
//    int top() {
//        return _st.top();
//    }
//
//    int getMin() {
//        return _minst.top();
//    }
//    stack<int> _st;
//    stack<int> _minst;
//};

//牛客-栈的压入、弹出序列
//class Solution {
//public:
//    bool IsPopOrder(vector<int> pushV, vector<int> popV) {
//        stack<int> tmp;
//        int pushi = 0, popi = 0;
//        while (pushi < pushV.size()) {
//            tmp.push(pushV[pushi++]);
//            while (!tmp.empty()) {
//                if (tmp.top() == popV[popi]) {
//                    tmp.pop();
//                    ++popi;
//                }
//                else {
//                    break;
//                }
//            }
//        }
//        return pushi == popi;
//        //return tmp.empty();
//    }
//};



